/*
    1.首先判断是否s的长度是否为奇数，或者第一个括号是否为闭括号，直接返回false
    2.定义一个空数组 stack，当做栈。
    3.for循环依次判断，开括号进栈，闭括号判断栈顶括号是否与之匹配。不匹配返回false
    4.循环结束判断栈的长度是否为0.  为空返回true，表示全部匹配完， 不为空返回false， 表示没有全部匹配
 */
var isValid = function(s) {
    if (s.length & 1 || s[0] === ')' || s[0] === ']' || s[0] === '}'){
        return false;
    }
    var stack = [];
    for (let i = 0; i < s.length; i++) {
        if (s[i] === '(' || s[i] === '[' || s[i] === '{'){
            stack.push(s[i]);
            continue;
        }else if (stack.length === 0 && (s[i] === ')' || s[i] === ']' || s[i] === '}')){
            return  false;
        }else if (s[i] === ')' && stack[stack.length - 1] === '('){
            stack.pop();
        }else if (s[i] === ']' && stack[stack.length - 1] === '['){
            stack.pop();
        }else if (s[i] === '}' && stack[stack.length - 1] === '{'){
            stack.pop();
        }
    }
    return stack.length === 0;
};

console.log(isValid("][["));

console.log(4 & 1);